package com.archway.appframe.web.servlet.bind;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;

import org.slf4j.LoggerFactory;


public class OutputObject extends HashMap<String,Map> implements Serializable {
	
	private transient Logger  log = LoggerFactory.getLogger(OutputObject.class);
	/**********不可序列化***/
	public static final String RTN_CODE="code";
	public static final String RTN_MSG="msg";
	public static final String SUCCESS="200";
	public static final String ERROR="400";
	public static final String ERROR_MSG_NONE="";
	
	private Map<String, Object> head = null; 

	public OutputObject() {
		this.put("data", new HashMap()); //根元素

		head = new HashMap<String, Object>();
		/*默认标记为成功*/
		head.put(RTN_CODE, SUCCESS);
		head.put(RTN_MSG, ERROR_MSG_NONE);
		this.setHead(head);
	}

	/**
	 * 
	 * <h1>此方法主要出现在有异常需要报告的时候</h1>
	 * 通常 当不需要报告 业务失败的时候 也没有人愿意 做多余的  成功设置，故这里设计为 只有需要设置 错误信息时才设置本信息
	 * @param head
	 */
	public void setHead(Map<String, Object> head) {
		String code = SUCCESS;
		String msg = ERROR_MSG_NONE;
		if(head!=null){
			/*code 无输入或 标记为 SUCCESS 则默认 成功*/
			code = (String) head.get(RTN_CODE);
			msg = (String) head.get(RTN_MSG);
			/*如果head有内容 且不设置为成功，则也认为是 设置为失败*/
			if (!SUCCESS.equals(code)) {
				code = ERROR;
			}
		}
		this.head.put(RTN_CODE, code);
		this.head.put(RTN_MSG, msg);
		this.get("data").put("head", this.head);
	}

	/**
	 * <h1>开发人员将主要用到此方法，用来设置将要传回给前台的信息</h1>
	 * @param bean
	 */
	public void setBean(Map<String, Object> bean) {
		this.get("data").put("bean", bean);
		//log.trace(msg);(msg);
	}
	

}
